class Scheduler {
    constructor() {
        // 任务队列
        this.taskQueue = [];
        // 当前正在执行的任务数量
        this.runningCount = 0;
    }
    async add(task) {
        // 将任务添加到队列中
        this.taskQueue.push(task);
        // 如果当前正在执行的任务数量小于2，执行任务
        if (this.runningCount < 2) {
            this.runTask();
        }
    }
    async runTask() {
        // 如果任务队列不为空且当前正在执行的任务数量小于2
        while (this.taskQueue.length > 0 && this.runningCount < 2) {
            // 从队列中取出任务
            const task = this.taskQueue.shift();
            // 当前正在执行的任务数量加1
            this.runningCount++;
            try {
                // 执行任务
                await task();
            } finally {
                // 任务执行完毕，当前正在执行的任务数量减1
                this.runningCount--;
                // 继续执行下一个任务
                this.runTask();
            }
        }
    }
}
const syncTask = (taskName) => {
    return () => {
        console.log(taskName);
    };
};
const asyncTask = (taskName, time) => {
    const timeout = (execTime) => {
        return new Promise(resolve => setTimeout(resolve, execTime));
    };
    return () => {
        return timeout(time).then(() => console.log(taskName));
    };
};

const scheduler = new Scheduler();
scheduler.add(syncTask('task1'));
scheduler.add(asyncTask('task2', 1000));
scheduler.add(syncTask('task3'));
scheduler.add(asyncTask('task4', 2000));
scheduler.add(syncTask('task5'));